home *** CD-ROM | disk | FTP | other *** search
- #include <iocslib.h>
- #include <doslib.h>
-
- /* 画面の初期化 */
- /* 512×512ドット,ピクセル比1:1,65536色 */
- void init_screen()
- {
- volatile unsigned short *p;
- int ssp;
-
- /* ファンクションキー表示を消す */
- C_FNKMOD(3);
-
- #if 0
- CRTMOD(12);
- G_CLR_ON();
- #endif
-
- /* スーパーバイザモードへ移行 */
- ssp = B_SUPER(0);
-
- /* 垂直帰線期間を待つ */
- while ((*((volatile unsigned char *)0x00e88001) & 0x10) == 0);
- while ((*((volatile unsigned char *)0x00e88001) & 0x10) != 0);
-
- /* ビデオコントローラの設定(65536色,SPRITE>TEXT>GRAPHIC) */
- *((volatile unsigned short *)0x00e82400) = 0x0003;
- *((volatile unsigned short *)0x00e82500) = 0x06e4;
- *((volatile unsigned short *)0x00e82600) = 0x006f;
-
- /* CRTCのレジスタの設定(512×512ドット,ピクセル比1:1,65536色) */
- p = (volatile unsigned short *)0x00e80000;
- if ((p[20] & 0xff) > 0x16) {
- /* 画面モードが低くなる */
- p[20] = 0x0316; /* メモリモードセット/表示モードセット */
- p[1] = 0x000e; /* 水平同期終了位置 */
- p[2] = 0x002c; /* 水平表示開始位置 */
- p[3] = 0x006c; /* 水平表示終了位置 */
- p[4] = 0x0237; /* 垂直トータル */
- p[5] = 0x0005; /* 垂直同期終了位置 */
- p[6] = 0x0028; /* 垂直表示開始位置 */
- p[7] = 0x0228; /* 垂直表示終了位置 */
- p[0] = 0x0089; /* 水平トータル */
- } else {
- /* 画面モードが同じか高くなる */
- p[0] = 0x0089; /* 水平トータル */
- p[1] = 0x000e; /* 水平同期終了位置 */
- p[2] = 0x002c; /* 水平表示開始位置 */
- p[3] = 0x006c; /* 水平表示終了位置 */
- p[4] = 0x0237; /* 垂直トータル */
- p[5] = 0x0005; /* 垂直同期終了位置 */
- p[6] = 0x0028; /* 垂直表示開始位置 */
- p[7] = 0x0228; /* 垂直表示終了位置 */
- p[20] = 0x0316; /* メモリモードセット/表示モードセット */
- }
-
- /* HRLビットクリア */
- *((volatile unsigned char *)0x00e8e007) &= ~0x02;
-
- /* ユーザモードに戻る */
- if (ssp >= 0) {
- B_SUPER(ssp);
- }
-
- /* コンソールのサイズは64桁×32行 */
- B_CONSOL(0, 0, 64-1, 32-1);
-
- /* コンソールをクリア */
- B_CLR_AL();
-
- /* コンソールのカーソルを消す */
- B_CUROFF();
- }
-
- /* 画面の後始末 */
- void tini_screen()
- {
- /* コンソールのカーソルを元に戻す */
- B_CURON();
- }
-